Get rid of a few more explicit microsecond accesses.
authorrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 17 Jul 2013 03:20:24 +0000 (03:20 +0000)
committerrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 17 Jul 2013 03:20:24 +0000 (03:20 +0000)
Add GPX test for wild and crazy times.

gpsbabel/garmin.cc
gpsbabel/reference/bigtime.gpx [new file with mode: 0644]
gpsbabel/tef_xml.cc
gpsbabel/testo.d/gpx.test

index fda06a80f6ad77b3a38bb8e62ebb948b6abf3625..30724c66b8e6bce3e0a935888334b1a867672d86 100644 (file)
@@ -705,8 +705,7 @@ pvt2wpt(GPS_PPvt_Data pvt, waypoint* wpt)
            pvt->tow
            - pvt->leap_scnds;
   wptimes = floor(wptime);
-  wpt->creation_time = wptimes;
-  wpt->microseconds = 1000000.0 * (wptime - wptimes);
+  wpt->SetCreationTime(wptimes, 1000000.0 * (wptime - wptimes));
 
   /*
    * The Garmin spec fifteen different models that use a different
diff --git a/gpsbabel/reference/bigtime.gpx b/gpsbabel/reference/bigtime.gpx
new file mode 100644 (file)
index 0000000..3a1c476
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.0" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
+  <time>1970-01-01T00:00:00Z</time>
+  <bounds minlat="35.972033333" minlon="-87.134700000" maxlat="36.090683333" maxlon="-86.679550000"/>
+  <wpt lat="35.972033333" lon="-87.134700000">
+    <time>1234-12-12T08:00:00.123Z</time>
+    <name>Early</name>
+    <cmt>Early</cmt>
+    <desc>Early</desc>
+  </wpt>
+  <wpt lat="36.090683333" lon="-86.679550000">
+    <time>4096-12-12T08:00:00.410Z</time>
+    <name>Late</name>
+    <cmt>Late</cmt>
+    <desc>Late</desc>
+  </wpt>
+</gpx>
index 550d0d0582a628945d17115648d6706858ffcc05..cdb65735c0121bc32dd67dcf2237559607f1c02e 100644 (file)
@@ -200,8 +200,8 @@ waypoint_final()
     return;
   }
 
-  via = wpt_tmp->microseconds;
-  wpt_tmp->microseconds = 0;
+  via = wpt_tmp->wpt_flags.fmt_use ;
+  wpt_tmp->wpt_flags.fmt_use  = 0;
 
   if (version < 2) {   /* keep the old behaviour */
     wpt_tmp->notes = wpt_tmp->description;
@@ -252,7 +252,7 @@ tef_item_start(const char *args, const char **attrv)
 
   wpt_tmp = waypt_new();
   if ((waypoints == 1) || (waypoints == item_count)) {
-    wpt_tmp->microseconds++;
+    wpt_tmp->wpt_flags.fmt_use ++;
   }
 
   while (*avp) {
@@ -262,7 +262,7 @@ tef_item_start(const char *args, const char **attrv)
       wpt_tmp->description = trimmed_strdup(avp[1]);
     } else if ((0 == case_ignore_strcmp(avp[0], "ViaStation")) &&
                (0 == case_ignore_strcmp(avp[1], "true"))) {
-      wpt_tmp->microseconds = 1;  /* only a flag */
+      wpt_tmp->wpt_flags.fmt_use  = 1;  /* only a flag */
     }
 
     /* new in TEF V2 */
index 0c74668a218f97d14107dbb26052870550b467af..e4fd6b5f365cdcdc4790e74af1401cc11e461942 100644 (file)
@@ -21,3 +21,7 @@ compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx.gpx
 rm -f ${TMPDIR}/extensiondata.gpx
 gpsbabel -i unicsv -f ${REFERENCE}/extensiondata.unicsv -x transform,trk=wpt -o gpx,garminextensions -F ${TMPDIR}/extensiondata.gpx
 compare ${REFERENCE}/extensiondata~unicsv.gpx ${TMPDIR}/extensiondata.gpx
+
+# Read, write GPX file with times that don't fit in time_t, subsecond.
+gpsbabel -i gpx -f ${REFERENCE}/bigtime.gpx -o gpx -F ${TMPDIR}/bigtime.gpx
+compare ${REFERENCE}/bigtime.gpx ${TMPDIR}/bigtime.gpx